package com.zhangsun.service;

import java.util.Date;

public interface JwtService {

    /**
     * 将token存储到redis
     *
     * @param key  redis键
     * @param val  redis值
     * @param time redis过期时间
     */
    void setExpire(String key, String val, long time);

    /**
     * 移除token
     *
     * @param key redis键
     */
    void del(String key);

    /**
     * 从redis中判断是否有效
     *
     * @param authToken token
     * @return 结果
     */
    Boolean validateRedisToken(String authToken);

    /**
     * 生成令牌
     *
     * @param username 用户
     * @return 令牌
     */
    String generateToken(String username, String password);

    /**
     * 从令牌中获取用户名
     *
     * @param token 令牌
     * @return 用户名
     */
    String getUsernameFromToken(String token);

    /**
     * 从令牌中获取密码
     *
     * @param token 令牌
     * @return 用户名
     */
    String getPasswordFromToken(String token);

    /**
     * 获取过期时间
     *
     * @param token 令牌
     * @return 过期时间
     */
    Date getExpiration(String token);

    /**
     * 刷新令牌
     *
     * @param token 原令牌
     * @return 新令牌
     */
    String refreshToken(String token);

    /**
     * 刷新令牌
     *
     * @param token 原令牌
     * @return 新令牌
     */
    String refreshToken(String token, String val);

    /**
     * 验证令牌
     *
     * @param token    令牌
     * @param username 用户
     * @return 是否有效
     */
    Boolean validateToken(String token, String username, String password);

}
